#ifndef PWAVE_PROBLEM_H
#define PWAVE_PROBLEM_H

#include "CmdLineArgs.h"
#include "Data3D.h"
#include "MPI_Topo.h"


class Problem {
public:
    virtual void init(const CmdLineArgs* cmd) = 0;
    virtual void partition(Data3D* data3D) = 0;
    virtual void create_MPI_topo(MPI_Topo* topo) = 0;
    virtual void init_model(Data3D* data3D, const MPI_Topo* topo) = 0;
    virtual double* solve(Data3D* data3D, const MPI_Topo* topo) = 0;
    virtual void free() = 0;
};

#endif //PWAVE_PROBLEM_H
